﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using SistemaGO_Library.Entidades.Ocorrencia;
using SistemaGO_Library.Entidades.Mudanca;
using SistemaGO_Library.Entidades.Categoria;
using SistemaGO_Library;


namespace SistemaGO_Desktop.Visao.Telas
{
    public partial class frmExplanarOcorrencia : Form
    {
        private static frmExplanarOcorrencia instancia = null;
        public Ocorrencia oco = new Ocorrencia();
        private Ocorrencia novaOcorrencia = new Ocorrencia();
        Mudanca mud = new Mudanca();
        Categoria cat = new Categoria();
        private Fachada fachada = Fachada.getInstance();
        ArrayList arrayTbs, arrayCbs, arrayMtbs;
        bool flag = false;
        bool flag2 = false;
        bool flag3 = false;

        private frmExplanarOcorrencia()
        {
            InitializeComponent();                        
            tbExplanarAvRuaOcorrencia.Focus();
            cbExplanarCategoriaOcorrencia.Items.AddRange(fachada.buscarNomesCategorias());

            arrayTbs = new ArrayList();
            arrayCbs = new ArrayList();
            arrayMtbs = new ArrayList();
            arrayTbs.Add(tbExplanarAvRuaOcorrencia);
            arrayCbs.Add(cbExplanarBairroOcorrencia);
            arrayTbs.Add(tbExplanarPontoDeReferenciaOcorrencia);
            arrayMtbs.Add(mtbExplanarCepOcorrencia);
            arrayCbs.Add(cbExplanarCategoriaOcorrencia);
            arrayTbs.Add(tbExplanarNomeOcorrencia);
            arrayTbs.Add(tbExplanarEmailOcorrencia);
            arrayMtbs.Add(mtbExplanarCelularOcorrencia);
        }

        public static frmExplanarOcorrencia getInstance() {
            if (instancia == null) {
                instancia = new frmExplanarOcorrencia();
            } else {
                instancia.Focus();
            }
            return instancia;
        }

        private void limparTela() {
            tbExplanarAvRuaOcorrencia.Text = "";
            cbExplanarBairroOcorrencia.Text = "Selecione";
            tbExplanarPontoDeReferenciaOcorrencia.Text = "";
            mtbExplanarCepOcorrencia.Text = "";
            cbExplanarCategoriaOcorrencia.Text = "Selecione";
            pbExplanarImagemOcorrencia.Image = SistemaGO_Desktop.Properties.Resources.AdicionarOcorrenciaImagem;
            pbExplanarImagemOcorrencia.SizeMode = PictureBoxSizeMode.CenterImage;
            tbExplanarNomeOcorrencia.Text = "";
            tbExplanarEmailOcorrencia.Text = "";
            mtbExplanarCelularOcorrencia.Text = "";
            rbExplanarEnvioEmailOcorrencia.Checked = true;
            rbExplanarEnvioCelularOcorrencia.Checked = false;
        }

        private void isEmptyTb(ArrayList tb)
        {
            for (int i = 0; i < tb.Count; i++)
            {
                if (((TextBox)tb[i]).Text.Trim().Equals(""))
                {
                    MessageBox.Show("Campo " + ((TextBox)tb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((TextBox)tb[i]).Focus();
                    flag = true;
                    return;
                }
            }
            flag = false;
        }

        private void isEmptyCb(ArrayList cb)
        {
            for (int i = 0; i < cb.Count; i++)
            {
                if (((ComboBox)cb[i]).Text.Equals("Selecione"+""))
                {
                    MessageBox.Show("Campo " + ((ComboBox)cb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((ComboBox)cb[i]).Focus();
                    flag2 = true;
                    return;
                }
            }
            flag2 = false;
        }

        private void isEmptyMtb(ArrayList mtb)
        {
            for (int i = 0; i < mtb.Count; i++)
            {
                if (((MaskedTextBox)mtb[i]).Text.Equals(""))
                {
                    MessageBox.Show("Campo " + ((MaskedTextBox)mtb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((MaskedTextBox)mtb[i]).Focus();
                    flag3 = true;
                    return;
                }
            }
            flag3 = false;
        }

        private void btExplanarImagemOcorrencia_Click_1(object sender, EventArgs e) {
            if (ofdExplanarImagemOcorrencia.ShowDialog() == DialogResult.OK) {
                pbExplanarImagemOcorrencia.Image = Image.FromFile(ofdExplanarImagemOcorrencia.FileName);
                pbExplanarImagemOcorrencia.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }

        private void btExplanarEditarOcorrencia_Click(object sender, EventArgs e) {
            isEmptyTb(arrayTbs);
            if (!flag)
            {
                isEmptyCb(arrayCbs);
                if (!flag2)
                {
                    isEmptyMtb(arrayMtbs);
                    if (!flag3)
                    {
                        novaOcorrencia.Ocorrencia_cod = int.Parse(tbExplanarCodigoOcorrencia.Text);
                        novaOcorrencia.Ocorrencia_av_rua = tbExplanarAvRuaOcorrencia.Text;
                        novaOcorrencia.Ocorrencia_bairro = cbExplanarBairroOcorrencia.Text;
                        novaOcorrencia.Ocorrencia_ponto_ref = tbExplanarPontoDeReferenciaOcorrencia.Text;
                        novaOcorrencia.Ocorrencia_cep = mtbExplanarCepOcorrencia.Text;
                        novaOcorrencia.Categoria_cod = fachada.buscarCodigoCategoriaPorNome(cbExplanarCategoriaOcorrencia.Text);
                        novaOcorrencia.Ocorrencia_imagem = oco.Ocorrencia_imagem = "C:\\Ocorrencias\\Ocorrencia" + tbExplanarCodigoOcorrencia.Text + ".png";
                        novaOcorrencia.Denunciante_nome = tbExplanarNomeOcorrencia.Text;
                        novaOcorrencia.Denunciante_email = tbExplanarEmailOcorrencia.Text;
                        novaOcorrencia.Denunciante_celular = mtbExplanarCelularOcorrencia.Text;
                        if (rbExplanarEnvioCelularOcorrencia.Checked)
                        {
                            novaOcorrencia.Ocorrencia_envio = "C";
                        }
                        else
                        {
                            novaOcorrencia.Ocorrencia_envio = "E";
                        }
                        novaOcorrencia.Ocorrencia_data_cadastro = DateTime.Now;
                        try
                        {
                            //FileStream fs = new FileStream("C:\\Ocorrencias\\Ocorrencia" + novaOcorrencia.Ocorrencia_cod + ".png", FileMode.Create, System.Security.AccessControl.FileSystemRights.FullControl, FileShare.ReadWrite);
                            //FileInfo fi = new FileInfo("C:\\Ocorrencias\\Ocorrencia" + novaOcorrencia.Ocorrencia_cod + ".png");
                            //fi.Attributes = FileAttributes.Archive;
                            //fi.Delete();
                            //novaOcorrencia.Ocorrencia_imagem = oco.Ocorrencia_imagem = "C:\\Ocorrencias\\Ocorrencia" + tbExplanarCodigoOcorrencia.Text + ".png";
                            fachada.alterarOcorrencia(oco.Ocorrencia_cod, novaOcorrencia);
                            pbExplanarImagemOcorrencia.Image.Save("C:\\Ocorrencias\\Ocorrencia" + novaOcorrencia.Ocorrencia_cod + ".png");
                            MessageBox.Show("Ocorrência editada com sucesso", "Edição Realizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            limparTela();
                            tbExplanarAvRuaOcorrencia.Focus();
                            this.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
        }

        private void btLimparOcorrencia_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer limpar a tela?", "Limpar Tela", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                limparTela();
                tbExplanarAvRuaOcorrencia.Focus();
            }
        }

        private void frmExplanarOcorrencia_FormClosing(object sender, FormClosingEventArgs e) {
            instancia = null;
        }

        private void frmExplanarOcorrencia_Load(object sender, EventArgs e)
        {
            if (!oco.Ocorrencia_cod.Equals(0))
            {
                //buscando a ocorrencia
                oco = fachada.buscarOcorrencia(oco.Ocorrencia_cod);
                tbExplanarCodigoOcorrencia.Text = oco.Ocorrencia_cod.ToString();
                tbExplanarAvRuaOcorrencia.Text = oco.Ocorrencia_av_rua;
                cbExplanarBairroOcorrencia.Text = oco.Ocorrencia_bairro;
                tbExplanarPontoDeReferenciaOcorrencia.Text = oco.Ocorrencia_ponto_ref;
                tbExplanarAvRuaOcorrencia.Text = oco.Ocorrencia_av_rua;
                cbExplanarBairroOcorrencia.Text = oco.Ocorrencia_bairro;
                tbExplanarPontoDeReferenciaOcorrencia.Text = oco.Ocorrencia_ponto_ref;
                mtbExplanarCepOcorrencia.Text = oco.Ocorrencia_cep;                
                //buscando a categoria
                int i = oco.Categoria_cod;
                cat = fachada.buscarCategoria(i);
                cbExplanarCategoriaOcorrencia.Text = cat.Categoria_nome;
                //continuando com ocorrencia...
                try {
                    FileStream fs = new FileStream(oco.Ocorrencia_imagem, FileMode.Open, FileAccess.ReadWrite);
                    pbExplanarImagemOcorrencia.Image = Image.FromStream(fs);
                    pbExplanarImagemOcorrencia.SizeMode = PictureBoxSizeMode.StretchImage;
                    fs.Close();
                    fs.Dispose();
                } catch {
                    MessageBox.Show("Imagem não encontrada!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Information);                   
                }
                tbExplanarNomeOcorrencia.Text = oco.Denunciante_nome;
                tbExplanarEmailOcorrencia.Text = oco.Denunciante_email;
                mtbExplanarCelularOcorrencia.Text = oco.Denunciante_celular;
                if (oco.Ocorrencia_envio.Equals("E")) {
                    rbExplanarEnvioEmailOcorrencia.Checked = true;
                }
                else {
                    rbExplanarEnvioCelularOcorrencia.Checked = true;                    
                }
            }
        }

        private void cbExplanarBairroOcorrencia_Leave(object sender, EventArgs e)
        {
            if (cbExplanarBairroOcorrencia.Text.Equals(""))
            {
                cbExplanarBairroOcorrencia.Text = "Selecione";
            }
        }

        private void cbExplanarCategoriaOcorrencia_Leave(object sender, EventArgs e)
        {
            if (cbExplanarCategoriaOcorrencia.Text.Equals(""))
            {
                cbExplanarCategoriaOcorrencia.Text = "Selecione";
            }
        }
    }
}
